package features.advance.leetcode.tree.easy;

import features.advance.leetcode.tree.model.TreeNode;
import features.advance.leetcode.util.TreeUtil;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * @author LIN
 * @date 2022-06-29 14:20
 *
 *  144. 二叉树的前序遍历
 * 给你二叉树的根节点 root ，返回它节点值的 前序 遍历。
 *
 * 难度：简单
 *
 * 示例 1：
 *
 *
 * 输入：root = [1,null,2,3]
 * 输出：[1,2,3]
 * 示例 2：
 *
 * 输入：root = []
 * 输出：[]
 * 示例 3：
 *
 * 输入：root = [1]
 * 输出：[1]
 * 示例 4：
 *
 *
 * 输入：root = [1,2]
 * 输出：[1,2]
 * 示例 5：
 *
 *
 * 输入：root = [1,null,2]
 * 输出：[1,2]
 *
 *
 * 提示：
 *
 * 树中节点数目在范围 [0, 100] 内
 * -100 <= Node.val <= 100
 *
 *
 * 进阶：递归算法很简单，你可以通过迭代算法完成吗？
 */
public class Solution144 {

    public static void main(String[] args) {
        Solution solution = new Solution() {
        };
        List<Integer> integers = solution.preorderTraversal(TreeUtil.stringToTreeNode("[1,null,3,2]"));
        System.out.println(integers);

    }

    static class Solution {
        private LinkedList<TreeNode<Integer>> queue = new LinkedList();
        public List<Integer> preorderTraversal(TreeNode root) {
            List<Integer> res = new ArrayList();
            if(root == null){
                return res;
            }
            queue.add(root);
            while(!queue.isEmpty()){
                TreeNode<Integer> t = queue.pollLast();
                //   System.out.println(t.val);
                res.add(t.val);
                if(t.right != null){
                    queue.addLast(t.right);
                }
                if(t.left != null){
                    queue.addLast(t.left);
                }
            }
            return res;
        }
    }
}
